package com.lhz.model.constant;


import com.lhz.model.entity.JobInfo;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @Author: LiHuaZhi
 * @Date: 2020/6/4 22:00
 * @Description:
 **/
public class RunnableConstant {

    /**
     * redis锁的key
     */
    public static String JOB_LOCK_KEY = "job_lock_key:";
    /**
     * 上锁时间（ms）
     */
    public static Long JOB_LOCK_TIME = 1000L;

    /**
     * 存入被执行的中的task实体 key:taskId,value:task对象
     */
    public static Map<Long, JobInfo> JOB_MAP = new ConcurrentHashMap<>();

    /**
     * ConcurrentHashMap保证线程安全
     */
    public static Map<Long, ScheduledFuture<?>> JOB_SCHEDULED_MAP = new ConcurrentHashMap<>();


    /**
     * 单机最大任务数
     */
    public static Integer MAX_NUM = 2;

    /**
     * 最大时间戳(ms)
     */
    public static Integer DIFF_TIME = 100;

    /**
     * 当前机器注册地址
     */
    public static String EXECUTOR_ADDRESS;

    /**
     * 集群中，其他机器注册地址
     * 注意：如果第一台机器启动后，马上启动第二台，
     * 第一台服务的该值依然可能为空，直到通过定时任务进行后才会有值
     */
    public static Set<String> OTHER_EXECUTOR_ADDRESS = new HashSet<>();

    /**
     * 集群中，其他机器心跳失败次数
     */
    public static Map<String, Integer> OTHER_EXECUTOR_FAIL_NUM = new HashMap<>();

    /**
     * 注册机Id
     */
    public static Long EXECUTOR_ID;

    /**
     * 最大失败次数
     */
    public static Integer FAIL_MAX = 3;

    /**
     * 最大时间超时时长
     */
    public static Integer TIMEOUT_MAX = 30;

    /**
     * 记录任务失败次数
     */
    public static Map<Long, AtomicInteger> FAIL_JOB_NUM = new ConcurrentHashMap<>();

    /**
     * 分配启动任务接口
     */
    public static String DISTRIBUTE_START_API = "/job/distribute/start";

    /**
     * 停止任务
     */
    public static String DISTRIBUTE_STOP_API = "/job/distribute/stop";

    /**
     * 健康检测
     */
    public static String DISTRIBUTE_HEALTH_API = "/job/distribute/health";
}
